#include <bits/stdc++.h>
#include <queue>
#define pii pair<int,int> 
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch))f^=(ch=='-'),ch=getchar();
	while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return f?x:-x;
}
const int N=100005;
struct pla{
	int l,r;
}d[N];
int cmp(pla x,pla y){
	return x.l<y.l;
}
int s[N],n,ma,mb,f[N],g[N],ans;
int lowbit(int x){return x&-x;}
void modify(int x,int y){
	for(;x<N;x+=lowbit(x))s[x]+=y;
}
int query(int x){
	if(!x)return 0;
	int ret=0;
	for(;x;x-=lowbit(x))
		ret+=s[x];
	return ret;
}
priority_queue<pii> que;
priority_queue<int> upd;
void init(){
	memset(s,0,sizeof(s));
	while(que.size())que.pop();
	while(upd.size())upd.pop();
	for(int i=1;i<N;i++)upd.push(-i);
}
int main(){
	freopen("airport.in","r",stdin);
	freopen("airport.out","w",stdout);
	n=read(),ma=read(),mb=read();
	for(int i=1;i<=ma;i++){
		int x=read(),y=read();
		d[i]=(pla){x,y};
	}
	sort(d+1,d+ma+1,cmp);
	init();
	for(int i=1;i<=ma;i++){
		if(!que.size()){
			int k=-upd.top();
			modify(k,1);
			upd.pop();
			que.push(make_pair(-d[i].r,k));
		}
		else{
			while(que.size()){
				int lt=-que.top().first;
				int rt=que.top().second;
				if(lt<d[i].l){
					que.pop();
					upd.push(-rt);
					continue;
				}
				else break;
			}
			int k=-upd.top();
			modify(k,1);
			upd.pop();
			que.push(make_pair(-d[i].r,k));
		}
	}
	for(int i=0;i<=n;i++)f[i]=query(i);
	/*			part one ^		*/
	
	for(int i=1;i<=mb;i++){
		int x=read(),y=read();
		d[i]=(pla){x,y};
	}
	sort(d+1,d+mb+1,cmp);
	init();
	for(int i=1;i<=mb;i++){
		if(!que.size()){
			int k=-upd.top();
			modify(k,1);
			upd.pop();
			que.push(make_pair(-d[i].r,k));
		}
		else{
			while(que.size()){
				int lt=-que.top().first;
				int rt=que.top().second;
				if(lt<d[i].l){
					que.pop();
					upd.push(-rt);
					continue;
				}
				else break;
			}
			int k=-upd.top();
			modify(k,1);
			upd.pop();
			que.push(make_pair(-d[i].r,k));
		}
	}
	for(int i=0;i<=n;i++)g[i]=query(i);
	
	for(int i=0;i<=n;i++)ans=max(ans,f[i]+g[n-i]);
	printf("%d",ans);
	return 0;
}
